#include <rpc/rpc.h>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <mysql/mysql.h>
#include "dbcon.h"
#include <stdio.h>
#include <string.h>
struct timeval tim;
double total=0,t1,t2;

output_data* echo_1(input_data *input, CLIENT *client) {
	             
        gettimeofday(&tim, NULL);
        t1=tim.tv_sec+(tim.tv_usec/1000000.0);
	static  output_data output;
	static  output_data_string output_string;

      	MYSQL conexao;
	char parabd[100];
	int res;
      	mysql_init(&conexao);
      	//abre a conexão com o banco, default, obanco está no local host, usuario e senha guest, o bd usado é teste, e a tabela chama-se aprendendo.
      	if ( mysql_real_connect(&conexao, "localhost", "guest", "guest", "teste", 0, NULL, 0) )
      	{
               	if (!strcmp(input->input_data,"INSERT")){
            		sprintf(parabd,"INSERT INTO aprendendo(nome) values('%s');", input->input_nome);
            		//mensagem para o banco
            	        res = mysql_query(&conexao,parabd);
            	        if (res) 
			 	printf("Erro na inserção %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
				mysql_close(&conexao);
				}
			else
			{
            		sprintf(parabd,"DELETE from aprendendo where %s = '%s';",input->input_removetype,input->input_nome);
            		//mensagem para o banco
            	        res = mysql_query(&conexao,parabd);
			mysql_close(&conexao);
			}
           	} 		    
       else
       {
            printf("Falha de conexao\n");
            printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
       }
	output.i = 1;
	gettimeofday(&tim, NULL);
        t2=tim.tv_sec+(tim.tv_usec/1000000.0);
	total = total + t2-t1;
	printf("Tempo total:%lf\n", total);
	return(&output);
  }
  
  
  
output_data_string* select_1 (input_data *input, CLIENT *client) {
        	gettimeofday(&tim, NULL);
        	t1=tim.tv_sec+(tim.tv_usec/1000000.0);
		static  output_data_string output_string;
		int conta;
	        MYSQL conexao;
	        MYSQL_RES *resp;
		MYSQL_ROW linhas;
	   	MYSQL_FIELD *campos;
		mysql_init(&conexao);
	        if ( mysql_real_connect(&conexao, "localhost", "guest", "guest", "teste", 0, NULL, 0) )
	      	{
		    	output_string.str = malloc (sizeof (char*)*1000);
            		strcpy(output_string.str , "");
            		if(mysql_query(&conexao,"SELECT * from aprendendo;"))
        	 	printf("Erro: %s\n",mysql_error(&conexao));
		      else
		      {
			resp = mysql_store_result(&conexao);//recebe a consulta
			if (resp) //se houver consulta
			{
			   //passa os dados dos campos para a variável campos
			   //escreve na tela os nomes dos campos dando
			   //um tab somente
			   campos = mysql_fetch_fields(resp);
			   for (conta=0;conta<mysql_num_fields(resp);conta++) {
			      	strcat(output_string.str,(campos[conta]).name);
			      	if (mysql_num_fields(resp)>1)
				  {
			      		strcat(output_string.str,"\t");
			      		}
			      }
			      	strcat(output_string.str,"\n");  

			      //enquanto retonrnar registros, conta até o
			      //número de colunas que a tabela tem e escreve na
			      //tela com um tab, depois pula a linha e tenta
			      //pegar outro registro
			      while ((linhas=mysql_fetch_row(resp)) != NULL)
			      {
				 for (conta=0;conta<mysql_num_fields(resp);conta++){
				    strcat(output_string.str,linhas[conta]);
			      		strcat(output_string.str,"\t");
			      		}
				 strcat(output_string.str,"\n");
			      }
			  }
			  
			  mysql_free_result(resp);//limpa a variável do resultado: resp
			}
		mysql_close(&conexao);
		gettimeofday(&tim, NULL);
        	t2=tim.tv_sec+(tim.tv_usec/1000000.0);
	  	total = total + t2-t1;
	  	printf("Tempo total:%lf\n", total);
	  	free(output_string.str);
		return(&output_string);
	}
	else
       {
            printf("Falha de conexao\n");
            printf("Erro %d : %s\n", mysql_errno(&conexao), mysql_error(&conexao));
       }

}
   	output_data_string* select_1_svc(input_data *input_data, struct svc_req *svc) {
		CLIENT *client;
		return(select_1(input_data,client));
	}

	output_data* echo_1_svc(input_data *input_data, struct svc_req *svc) {
		CLIENT *client;
		return(echo_1(input_data,client));
	}

